#ifndef __AVL_H
#define __AVL_H

#define ElementType int //void*

//定义平衡因子数
#define LH +1
#define EH 0
#define RH -1

//定义二叉排序树结构
typedef struct TreeNode
{
    ElementType data;
    int bf; //balance fiag
    struct TreeNode *left;
    struct TreeNode *right;
}BBTNode, *BBTree;

typedef struct BinarySortTree
{
    BBTNode* root;
}BBTree;


//树节点打印回调函数
typedef void (*PrintCall)(ElementType data);
//销毁树节点data域回调函数
typedef void (*DataDestroy)(ElementType data);
//树节点数据比较回调函数
typedef int (*DataCompare)(ElementType ctx, ElementType data);


//初始化二叉树
int BBT_Init(BBTree* tree);
//创建二叉树,返回指针
BBTree* BBT_Create();
//节点处右单旋
BBTNode * BBT_RotateRight(BBTNode* node);

#endif